<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>

    //递归
  const arr = [
   {id:1,pid:0,name:'中国'},
   {id:2,pid:0,name:'美国'},
   {id:3,pid:0,name:'日本'},
   {id:4,pid:3,name:'东京都'},
   {id:5,pid:4,name:'下北泽'}
]

function transToTreeDate(list,rootValue){
  const array =[]
  list.forEach(item => {
    if(item.pid===rootValue){
       //传入当前部门的id，去找所有数据中子集，如果找到，返回数组，数组内是子集，如果没找到，是空集
      const children=transToTreeDate(list,item.id)
      //如果找到当前部门item的子集，那么就给当前部门item动态添加一个属性，item.children=找到的数组children
      if(children.length>0)
        item.children=children
        array.push(item)
      
    }
  });
  return array
}
console.log( transToTreeDate(arr,0));

  </script>
</body>
</html>